using System;
using System.Collections.Generic;

namespace Commons.Models.Capabilities
{
	public interface ICapable
	{
		bool HasCapability<T> () where T : ICapability;

		bool HasCapability (Type type);

		T GetCapability<T> () where T : ICapability;

		object GetCapability (Type type);

		void AddCapability (ICapability capability);

		IEnumerable<ICapability> GetCapabilities ();
	}
}
